home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / Translation.p < prev    next >
Text File  |  1996-05-01  |  12KB  |  316 lines

  1. {
  2.      File:        Translation.p
  3.  
  4.      Contains:    Translation Manager (Macintosh Easy Open) Interfaces.
  5.  
  6.      Version:    Technology:    Macintosh Easy Open 1.1
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT Translation;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __TRANSLATION__}
  28. {$SETC __TRANSLATION__ := 1}
  29.  
  30. {$I+}
  31. {$SETC TranslationIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __FILES__}
  38. {$I Files.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __COMPONENTS__}
  41. {$I Components.p}
  42. {$ENDC}
  43. {$IFC UNDEFINED __TRANSLATIONEXTENSIONS__}
  44. {$I TranslationExtensions.p}
  45. {$ENDC}
  46.  
  47. {$PUSH}
  48. {$ALIGN MAC68K}
  49. {$LibExport+}
  50.  
  51. {  enumerated types on how a document can be opened }
  52.  
  53. TYPE
  54.     DocOpenMethod                        = INTEGER;
  55.  
  56. CONST
  57.     domCannot                    = 0;
  58.     domNative                    = 1;
  59.     domTranslateFirst            = 2;
  60.     domWildcard                    = 3;
  61.  
  62. {  0L terminated array of OSTypes, or FileTypes }
  63.  
  64. TYPE
  65.     TypesBlock                            = ARRAY [0..63] OF OSType;
  66.     TypesBlockPtr                        = ^OSType;
  67. {  Progress dialog resource ID }
  68.  
  69. CONST
  70.     kTranslationScrapProgressDialogID = -16555;
  71.  
  72. {  block of data that describes how to translate }
  73.  
  74. TYPE
  75.     FileTranslationSpecPtr = ^FileTranslationSpec;
  76.     FileTranslationSpec = RECORD
  77.         componentSignature:        OSType;
  78.         translationSystemInfo:    Ptr;
  79.         src:                    FileTypeSpec;
  80.         dst:                    FileTypeSpec;
  81.     END;
  82.  
  83.     FileTranslationSpecArrayPtr            = ^FileTranslationSpec;
  84. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  85. {
  86. ****************************************************************************************
  87. *   GetFileTypesThatAppCanNativelyOpen
  88. *  This routine returns a list of all FileTypes that an application can open by itself
  89. *  Enter:    appVRefNumHint        volume where application resides (can be wrong, and if is, will be used as a starting point)
  90. *             appSignature        signature (creator) of application
  91. *             nativeTypes            pointer to a buffer to be filled with up to 64 FileTypes
  92. *  Exit:    nativeTypes            zero terminated array of FileTypes that can be opened by app
  93. }
  94. FUNCTION GetFileTypesThatAppCanNativelyOpen(appVRefNumHint: INTEGER; appSignature: OSType; VAR nativeTypes: FileType): OSErr;
  95.     {$IFC NOT GENERATINGCFM}
  96.     INLINE $701C, $ABFC;
  97.     {$ENDC}
  98. {
  99. ****************************************************************************************
  100. *  ExtendFileTypeList
  101. *  This routine makes a new list of file types that can be translated into a type in the given list
  102. *  Used by StandardFile
  103. *  Enter:    originalTypeList        pointer to list of file types that can be opened
  104. *             numberOriginalTypes        number of file types in orgTypeList
  105. *              extendedTypeList        pointer to a buffer to be filled with file types
  106. *             numberExtendedTypes        max number of file types that can be put in extendedTypeList
  107. *  Exit:    extendedTypeList        buffer filled in with file types that can be translated
  108. *             numberExtendedTypes        number of file types put in extendedTypeList
  109. }
  110. FUNCTION ExtendFileTypeList({CONST}VAR originalTypeList: FileType; numberOriginalTypes: INTEGER; VAR extendedTypeList: FileType; VAR numberExtendedTypes: INTEGER): OSErr;
  111.     {$IFC NOT GENERATINGCFM}
  112.     INLINE $7009, $ABFC;
  113.     {$ENDC}
  114. {
  115. ****************************************************************************************
  116. *  This routine checks if a file can be opened by a particular application.
  117. *  If so, it returns if it needs to be translated first, and if so then how.
  118. *  The FileTypes that the app can open are specified by nativelyOpenableTypes,
  119. *  or if it is NULL, GetFileTypesThatAppCanNativelyOpen is called.
  120. *  Enter:    targetDocument        document to check if it can be opened
  121. *             appVRefNumHint        vRefNum of application to open doc ( can be wrong, and if is, will be used as a starting point)
  122. *             appSignature        signature (creator) of application to open doc
  123. *             nativeTypes            zero terminated list of FileTypes app can open natively, or NULL to use default list
  124. *             onlyNative            whether to consider if document can be translated before opening
  125. *             howToOpen            pointer to buffer in which to put how the document can be opened
  126. *             howToTranslate        pointer to buffer in which to put a FileTranslationSpec record
  127. *  Exit:    howToOpen            whether file needs to be translated to be read
  128. *             howToTranslate        if file can be translated, buffer filled in with how to translate
  129. *             returns                noErr, noPrefAppErr
  130. }
  131. FUNCTION CanDocBeOpened({CONST}VAR targetDocument: FSSpec; appVRefNumHint: INTEGER; appSignature: OSType; {CONST}VAR nativeTypes: FileType; onlyNative: BOOLEAN; VAR howToOpen: DocOpenMethod; VAR howToTranslate: FileTranslationSpec): OSErr;
  132.     {$IFC NOT GENERATINGCFM}
  133.     INLINE $701E, $ABFC;
  134.     {$ENDC}
  135. {
  136. ****************************************************************************************
  137. *  GetFileTranslationPaths
  138. *  This routine returns a list of all ways a translation can occure to or from a FileType.
  139. *  The app is checked to exist.  The hint for each app is the VRefNum and DTRefNum
  140. *  Enter:    srcDoc            source file or NULL for all matches
  141. *             dstDoc            destination FileType or NULL for all matches
  142. *             maxResultCount
  143. *             resultBuffer
  144. *  Exit:    number of paths
  145. }
  146. FUNCTION GetFileTranslationPaths(VAR srcDocument: FSSpec; dstDocType: FileType; maxResultCount: INTEGER; resultBuffer: FileTranslationSpecArrayPtr): INTEGER;
  147.     {$IFC NOT GENERATINGCFM}
  148.     INLINE $7038, $ABFC;
  149.     {$ENDC}
  150. {
  151. ****************************************************************************************
  152. *  GetPathFromTranslationDialog
  153. *  This routine, with a given document, application, and a passed typelist will display the
  154. *  Macintosh Easy Open translation dialog allowing the user to make a choice.  The choice
  155. *  made will be written as a preference (so the next call to CanDocBeOpened() will work).
  156. *  The routine returns the translation path information.
  157. *  Enter:    theDocument            FSSpec to document to open
  158. *             theApplication        FSSpec to application to open document
  159. *             typeList            Nil terminated list of FileType's (e.g. SFTypeList-like) of types
  160. *                                 you would like the documented translated to.  Order most perferred
  161. *                                 to least.
  162. *  Exit:    howToOpen            Translation method needed to open document
  163. *             howToTranslate        Translation specification
  164. *             returns                Any errors that might occur.
  165. }
  166. FUNCTION GetPathFromTranslationDialog({CONST}VAR theDocument: FSSpec; {CONST}VAR theApplication: FSSpec; typeList: TypesBlockPtr; VAR howToOpen: DocOpenMethod; VAR howToTranslate: FileTranslationSpec): OSErr;
  167.     {$IFC NOT GENERATINGCFM}
  168.     INLINE $7037, $ABFC;
  169.     {$ENDC}
  170. {
  171. ****************************************************************************************
  172. *   TranslateFile
  173. *  This routine reads a file of one format and writes it to another file in another format. 
  174. *  The information on how to translated is generated by the routine CanDocBeOpened.
  175. *  TranslateFile calls through to the TranslateFile Extension's DoTranslateFile routine.  
  176. *  The destination file must not exist.  It is created by this routine.  
  177. *  Enter:    sourceDocument            input file to translate
  178. *             destinationDocument        output file of translation
  179. *             howToTranslate            pointer to info on how to translate
  180. *  Exit:    returns                    noErr, badTranslationSpecErr 
  181. }
  182. FUNCTION TranslateFile({CONST}VAR sourceDocument: FSSpec; {CONST}VAR destinationDocument: FSSpec; {CONST}VAR howToTranslate: FileTranslationSpec): OSErr;
  183.     {$IFC NOT GENERATINGCFM}
  184.     INLINE $700C, $ABFC;
  185.     {$ENDC}
  186. {
  187. ****************************************************************************************
  188. *   GetDocumentKindString
  189. *  This routine returns the string the Finder should show for the "kind" of a document
  190. *  in the GetInfo window and in the kind column of a list view.  
  191. *  Enter:    docVRefNum        The volume containing the document
  192. *             docType            The catInfo.fdType of the document
  193. *             docCreator        The catInfo.fdCreator of the document
  194. *             kindString        pointer to where to return the string
  195. *  Exit:    kindString        pascal string.  Ex: "\pSurfCalc spreadsheet"
  196. *             returns            noErr, or afpItemNoFound if kind could not be determined
  197. }
  198. FUNCTION GetDocumentKindString(docVRefNum: INTEGER; docType: OSType; docCreator: OSType; VAR kindString: Str63): OSErr;
  199.     {$IFC NOT GENERATINGCFM}
  200.     INLINE $7016, $ABFC;
  201.     {$ENDC}
  202. {
  203. ****************************************************************************************
  204. *  GetTranslationExtensionName
  205. *  This routine returns the translation system name from a specified TranslationSpec
  206. *  Enter:    translationMethod    The translation path to get the translation name from
  207. *  Exit:    extensionName        The name of the translation system
  208. *             returns                Any errors that might occur
  209. }
  210. FUNCTION GetTranslationExtensionName({CONST}VAR translationMethod: FileTranslationSpec; VAR extensionName: Str31): OSErr;
  211.     {$IFC NOT GENERATINGCFM}
  212.     INLINE $7036, $ABFC;
  213.     {$ENDC}
  214. {
  215. ****************************************************************************************
  216. *  GetScrapDataProcPtr
  217. *  This is a prototype for the function you must supply to TranslateScrap. It is called to 
  218. *  get the data to be translated.  The first call TranslateScrap will make to this is to
  219. *  ask for the 'fmts' data.  That is a special.   You should resize and fill in the handle
  220. *  with a list all the formats that you have available to be translated, and the length of each.
  221. *  (See I.M. VI 4-23 for details of 'fmts').  It will then be called again asking for one of  
  222. *  the formats that 'fmts' list said was available.
  223. *  Enter:    requestedFormat            Format of data that TranslateScrap needs.
  224. *             dataH                    Handle in which to put the requested data
  225. *             srcDataGetterRefCon        Extra parameter for you passed to TranslateScrap
  226. *             
  227. *  Exit:    dataH                    Handle is resized and filled with data in requested format
  228. }
  229.  
  230. TYPE
  231.     GetScrapDataProcPtr = ProcPtr;  { FUNCTION GetScrapData(requestedFormat: ScrapType; dataH: Handle; srcDataGetterRefCon: UNIV Ptr): OSErr; }
  232.  
  233.     GetScrapDataUPP = UniversalProcPtr;
  234.  
  235. CONST
  236.     uppGetScrapDataProcInfo = $00000FE0;
  237.  
  238. FUNCTION NewGetScrapDataProc(userRoutine: GetScrapDataProcPtr): GetScrapDataUPP;
  239.     {$IFC NOT GENERATINGCFM }
  240.     INLINE $2E9F;
  241.     {$ENDC}
  242.  
  243. FUNCTION CallGetScrapDataProc(requestedFormat: ScrapType; dataH: Handle; srcDataGetterRefCon: UNIV Ptr; userRoutine: GetScrapDataUPP): OSErr;
  244.     {$IFC NOT GENERATINGCFM}
  245.     INLINE $205F, $4E90;
  246.     {$ENDC}
  247.  
  248. TYPE
  249.     GetScrapData                        = GetScrapDataUPP;
  250. {
  251. ****************************************************************************************
  252. *  TranslateScrap
  253. *  This routine resizes the destination handle and fills it with data of the requested format.
  254. *  The data is generated by translated one or more source formats of data supplied by
  255. *  the procedure srcDataGetter.  
  256. *  This routine is automatically called by GetScrap and ReadEdition.  You only need to call
  257. *  this if you need to translated scrap style data, but are not using the ScrapMgr or EditionMgr.
  258. *  Enter:    sourceDataGetter            Pointer to routine that can get src data
  259. *             sourceDataGetterRefCon        Extra parameter for dataGetter
  260. *             destinationFormat            Format of data desired
  261. *             destinationData                Handle in which to store translated data
  262. *             
  263. *  Exit:    dstData                        Handle is resized and filled with data in requested format
  264. }
  265. FUNCTION TranslateScrap(sourceDataGetter: GetScrapData; sourceDataGetterRefCon: UNIV Ptr; destinationFormat: ScrapType; destinationData: Handle; progressDialogID: INTEGER): OSErr;
  266.     {$IFC NOT GENERATINGCFM}
  267.     INLINE $700E, $ABFC;
  268.     {$ENDC}
  269. {$ENDC}
  270. {$ALIGN RESET}
  271. {$POP}
  272.  
  273. {$SETC UsingIncludes := TranslationIncludes}
  274.  
  275. {$ENDC} {__TRANSLATION__}
  276.  
  277. {$IFC NOT UsingIncludes}
  278.  END.
  279. {$ENDC}
  280.